package com.liliudong.template.biz.service.sys;

import com.liliudong.template.common.constant.DataScopeConst;
import com.liliudong.template.common.request.sys.SysUserAddRequest;
import com.liliudong.template.common.request.sys.SysUserModifyRequest;
import com.liliudong.template.common.entity.sys.SysUser;
import com.liliudong.template.common.response.sys.*;
import com.liliudong.template.common.response.sys.SysUserDetailResponse;
import com.liliudong.template.common.response.sys.SysUserPageResponse;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.core.service.IService;

import static com.liliudong.template.common.entity.sys.table.SysUserTableDef.SYS_USER;

public interface SysUserService extends IService<SysUser> {
    /**
     * 获取忽略数据权限的链式编程对象
     *
     * @return
     */
    default QueryChain<SysUser> queryChainIgnoreDataPermission() {
        return queryChain().from(SYS_USER.as(DataScopeConst.IGNORE_TABLE_ALIAS));
    }

    /**
     * 登录
     *
     * @param username 用户名
     * @param password 密码
     * @return {@link SysUserLoginResponse }
     */
    SysUserLoginResponse login(String username, String password);

    /**
     * 基本信息
     *
     * @return
     */
    SysUserProfileResponse profile();

    /**
     * 添加一个
     *
     * @param sysUserAddRequest sys用户添加数据
     */
    void addOne(SysUserAddRequest sysUserAddRequest);

    /**
     * 查询页面
     *
     * @param page 页码
     * @param size 大小
     * @return {@link Page }<{@link SysUserPageResponse }>
     */
    Page<SysUserPageResponse> queryPage(Long page, Long size);

    /**
     * 按id修改
     *
     * @param id               身份证件
     * @param sysUserModifyRequest sys用户修改数据
     */
    void modifyById(Long id, SysUserModifyRequest sysUserModifyRequest);

    /**
     * 按id详细信息
     *
     * @param id 身份证件
     * @return {@link SysUserDetailResponse }
     */
    SysUserDetailResponse detailById(Long id);
}
